/**
 * 目标：
 * 查找数组M中最大小的10个数字
 * 
 * 
 * 
 */
typedef int ElementType;

ElementType A[10];//A中的元素初始化为ElementType允许的最大元素

def func(){
    for s in M:
        if(s<A[9]){
            remove(A[9]);//删除A就元素，此时A中有9个元素
            order_insert(A,s);//将s按升序插入A
        }
}

//当M扫描完毕，A中的10个元素即为最小的10个
//时间复杂度为O(n),外部循环n次，
//而内部A数组的比较永远是被选中的10个数字和A中的十个数字比较，最坏100次比较
//空间复杂度O(1)，即10个空间

/**
 * 我的第一个想法是使用快速排序，找到pviot，一直左递归找pviot，
 * 平均情况下就是第一个元素大小正好可以将数组分为两半
 * 直到左子树的元素个数最接近10个的时候，停止递归，将这部分排序即可
 * n/2 + n/4 + n/8 + ... + n/k  
 * 其中n/k>10
 * 这是一个首项为n/2 公比为1/2的等比数列
 * 计算n/k=1即k=1的情况：n/2 + n/4 + n/8 + ... + n/n = n(1-(1/2)^n)其实当n足够大的时候
 * 其实也是O(n)的复杂度
 * 可以的...
 *  
 */